







## 上下文

## 词法作用域 和 动态作用域

## 编程语言通识

## BNF 范式（巴科斯范式）

## WebAssembly


## 箭头函数

没有 arguments  
无法通过 appily call bind 改变 this  
不适合用在以下几种场景

```js
const btn1 = document. getElementyId('btn1')
btn1.addEventListener( 'click', () =>
{
// console. log (this === window)
this.innerHTML = 'clicked'
）
```

vue 生命周期

```js
{
  mounted: () => {
    this.userName = "张三";
  };
}
```

react 可以用

```js
// vue 组件本质上是一个 JS 对象
1/ React 但件（非 Hooks） 它本质上是一个 ES6 class
class Foo {
    constructor(name, city) {
        this.name = name
        this.city = city
    }
    getName = () => {
        return this.name
    }
}
const f = new Foo('双越','北京'）
console.log(f.getName())
```

要熟练应用箭头函数，也要对函数 this arguments 敏感  
传统 vue 组件是JS对象，传统 React 组件是class，两者不同









## 移动端 H5 click 有 300ms 延迟，如何解决？  

延迟原因 ：double tap to zoom  
解决方案：Fastclick
```js
window.addEventListener( "load", function(){
    FastClick.attach(document.body)
})
```

原理：
监听touchend 事件（touchstart touchend 会先于click 触发）  
使用 自定义 DOM 事件模拟一个click 事件  
把默认的click 事件（300ms 之后触发） 禁止掉  

现代浏览器改进  
```HTML 
<meta name="viewport" content= "width=device-width, initial-scale=1.0" >
```

## 网络请求中，token 和cookie 有什么区别？  
cookie
1. HTTP 无状态 ，每次请求都要带 cookie，以帮助识别身份  
2. 服务端也可以向客户端 set-cookie , cookie 大小限制 4kb
3. 默认有跨域限制 ：不可跨域共享、传递 cookie
4. HTML5 之前 cookie 常被用于本地存储  
5. HTML5 之后推荐使用 localStorage 和 session Storage  

现代浏览器开始禁止第三方 cookie  
1. 和跨域限制不同。这里是：禁止网页引入的第三方 JS 设置 cookie  
2. 打击第三方广告，保护用户隐私
3. 新增属性 SameSite: Strict / Lax / None! 值可自己选择  


### cookie 和 session  

cookie 用于登录验证，存储用户标识（如 userid)  
session 在服务端，存储用户详细信息，和cookie 信息一一对应  
cookie + session 是常见登录验证解决方案  

Session 缺点  
占用服务端内存，硬件成本高  
多进程，多服务器时，不好同步, 需使用第三方缓存，如redis.

默认有跨域限制


### token vs cookie  
1. cookie 是HTTP 规范，而 token 是自定义传递  
2. cookie 会默认被浏览器存储，而 token 需白己存储  
3. token 默认没有跨域限制


### JWT (JSON Web Token )  
1. 前端发起登录，后端验证成功之后，返回一个加密的 token  
2. 前端自行存储这个 token（其中包含了用户信息，加密了）  
3. 以后访问服务端接口，都带着这个 token，作为用户信息  

JWT缺点  
用户信息存储在客户端，无法快速封禁某用户  
万一服务端秘钥被泄漏，则用户信息全部丢失  
token 体积一般大于 cookie ，会增加请求的数据量  

### 总结  
cookie: HTTP 标准；跨域限制；配合 session 使用；  
token ：无标准；无跨域限制；用于 JWT;

如有严格管理用户信息的需求（保密、快速封禁）推荐 Session  
如没有特殊要求，则使用JWT （如创业初期的网站）  
## http各版本主要区别

### HTTP 1.0
最基础的 HTTP 协议  
支持基本的 GET POST 方法  

### http1.1  
支持新的方法 PUT DELETE 等，可用于 Restful API  
缓存策略 cache-control E-tag 等  
支持长连接 Connection: keep-alive, 一次TCP 连接多次请求  
断点续传，状态码 206
### HTTP 2.0  
可压缩 header ，减少体积  
多路复用，一次TCP 连接中可以多个 HTTP 并行请求  
服务端推送  


## 什么是 HTTPS 中间人攻击？如何预防？


## <script></script>defer 和 async 有什么区别？


defer 延迟执行，等待页面解析完成才执行。

async 异步请求并执行。

## prefetch 和 dns-prefetch 有什么区别？

preload 资源在当前页面使用，会优先力载  
prefetch 资源在末来页面使用，空闲时加载  

## dns-prefetch #ll preconnet  
dns-prefetch 即 DNS 预查询  
preconnect 即 DNS 预连接  
```html
<head>
<link rel="dns-prefetch" href="https://fants.static.com/">
<link rel="preconnect" href="https://fonts.gstatic.com/"
crossorigin>
</head>
```
prefetch 是资源预获取（和preload 相关）  
dns-prefetch 是 DNS 预查询（和preconnect 相关）  



## 隐式类型转换

在switch中case内不存在。 case 使用的是全等操作符。










